package br.com.vti.sisp_sicrim.model.entity;

import java.math.BigDecimal;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

import br.com.crud4j.core.model.Model;
import br.com.vti.sisp_sicrim.model.entity.enums.CorCabelo;
import br.com.vti.sisp_sicrim.model.entity.enums.CorOlhos;
import br.com.vti.sisp_sicrim.model.entity.enums.Cutis;
import br.com.vti.sisp_sicrim.model.entity.enums.Possui;
import br.com.vti.sisp_sicrim.model.entity.enums.Status;

/**
 *
 * @author ednardomatos
 */
@Entity
@Table(name = "t_dados_fisicos", catalog = "desenvolvimento", schema = "e_sisp_sicrim")
@SequenceGenerator(name = "seq_dados_fisicos", sequenceName = "e_sisp_sicrim.seq_dados_fisicos", initialValue = 1, allocationSize = 1)
public class DadosFisicos implements Model<Integer> {
    
    private static final long serialVersionUID = -7900920078890131658L;
    
    @Id
    @Basic(optional = false)
    @GeneratedValue(strategy = GenerationType.AUTO, generator = "seq_dados_fisicos")
    private Integer id;
    
    @NotNull
    private BigDecimal altura;

    @NotNull
    private BigDecimal peso;
    
    @Size(max = 100)
    private String peculiaridade;
    
    @Size(max = 100)
    private String tatuagem;
    
    @Size(max = 100)
    private String cicatriz;
    
    @Size(max = 100)
    private String sinais;
    
    @Size(max = 100)
    private String amputacao;

    @Column(columnDefinition="bpchar(1)")
    private Possui barba;

    @Column(columnDefinition="bpchar(1)")
    private Possui bigode;

    @Column(columnDefinition="bpchar(1)")
    private Possui boca;

    @Column(columnDefinition="bpchar(1)")
    private CorCabelo cabelo;

    @Column(columnDefinition="bpchar(1)")
    private Possui labio;

    @Column(columnDefinition="bpchar(1)")
    private Possui compleicao;

    @Column(name = "cor_pele", columnDefinition="bpchar(1)")
    private Cutis corPele;
    
    @Column(columnDefinition="bpchar(1)")
    private Possui nariz;

    @Column(columnDefinition="bpchar(1)")
    private CorOlhos olho;
    
    @Column(columnDefinition="bpchar(1)")
    private Possui orelha;
    
    @Column(columnDefinition="bpchar(1)")
    private Possui rosto;

    @Column(columnDefinition="bpchar(1) default 'A'")
    private Status status;
    
    @ManyToOne(optional = false)
    @JoinColumn(name = "ficha_criminal", referencedColumnName = "id")
    private FichaCriminal fichaCriminal;

    public DadosFisicos() {
    }

    public DadosFisicos(Integer id) {
        this.id = id;
    }

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public BigDecimal getAltura() {
		return altura;
	}

	public void setAltura(BigDecimal altura) {
		this.altura = altura;
	}

	public BigDecimal getPeso() {
		return peso;
	}

	public void setPeso(BigDecimal peso) {
		this.peso = peso;
	}

	public String getPeculiaridade() {
		return peculiaridade;
	}

	public void setPeculiaridade(String peculiaridade) {
		this.peculiaridade = peculiaridade;
	}

	public String getTatuagem() {
		return tatuagem;
	}

	public void setTatuagem(String tatuagem) {
		this.tatuagem = tatuagem;
	}

	public String getCicatriz() {
		return cicatriz;
	}

	public void setCicatriz(String cicatriz) {
		this.cicatriz = cicatriz;
	}

	public String getSinais() {
		return sinais;
	}

	public void setSinais(String sinais) {
		this.sinais = sinais;
	}

	public String getAmputacao() {
		return amputacao;
	}

	public void setAmputacao(String amputacao) {
		this.amputacao = amputacao;
	}

	public Possui getBarba() {
		return barba;
	}

	public void setBarba(Possui barba) {
		this.barba = barba;
	}

	public Possui getBigode() {
		return bigode;
	}

	public void setBigode(Possui bigode) {
		this.bigode = bigode;
	}

	public Possui getBoca() {
		return boca;
	}

	public void setBoca(Possui boca) {
		this.boca = boca;
	}

	public CorCabelo getCabelo() {
		return cabelo;
	}

	public void setCabelo(CorCabelo cabelo) {
		this.cabelo = cabelo;
	}

	public Possui getLabio() {
		return labio;
	}

	public void setLabio(Possui labio) {
		this.labio = labio;
	}

	public Possui getCompleicao() {
		return compleicao;
	}

	public void setCompleicao(Possui compleicao) {
		this.compleicao = compleicao;
	}

	public Cutis getCorPele() {
		return corPele;
	}

	public void setCorPele(Cutis corPele) {
		this.corPele = corPele;
	}

	public Possui getNariz() {
		return nariz;
	}

	public void setNariz(Possui nariz) {
		this.nariz = nariz;
	}

	public CorOlhos getOlho() {
		return olho;
	}

	public void setOlho(CorOlhos olho) {
		this.olho = olho;
	}

	public Possui getOrelha() {
		return orelha;
	}

	public void setOrelha(Possui orelha) {
		this.orelha = orelha;
	}

	public Possui getRosto() {
		return rosto;
	}

	public void setRosto(Possui rosto) {
		this.rosto = rosto;
	}

	public Status getStatus() {
		return status;
	}

	public void setStatus(Status status) {
		this.status = status;
	}

	public FichaCriminal getFichaCriminal() {
		return fichaCriminal;
	}

	public void setFichaCriminal(FichaCriminal fichaCriminal) {
		this.fichaCriminal = fichaCriminal;
	}

	@Override
    public int hashCode() {
        int hash = 0;
        hash += (id != null ? id.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof DadosFisicos)) {
            return false;
        }
        DadosFisicos other = (DadosFisicos) object;
        if ((this.id == null && other.id != null) || (this.id != null && !this.id.equals(other.id))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "DadosFisicos[ id=" + id + " ]";
    }
    
}
